home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 013 / newpark.arc / PARK.ASM next >
Encoding:
Assembly Source File  |  1986-05-03  |  13.9 KB  |  295 lines

  1.               PAGE           66,132
  2. ;
  3. ; THIS IS THE START OF THE LOCAL DATA AND EXECUTABLE CODE
  4. ;
  5. CODE_SEG      SEGMENT
  6.               ASSUME         CS:CODE_SEG
  7.               ORG            100H
  8. BEGIN:        JMP            PARK
  9.               INT            20H
  10. CYLNUM0       DW             0
  11. CYLNUM1       DW             0
  12. PARK:
  13.               PUSH           AX
  14.               PUSH           CX
  15.               PUSH           DX
  16.               PUSH           ES
  17. ;
  18. ;  MOVE DRIVE 0 AS FAR AS POSSIBLE IN STEPS OF 100 TRACKS
  19. ;
  20. SEEK0100:     MOV            AH,0CH              ; SEEK
  21.               MOV            AL,1                ; GOTTA HAVE A SECTOR COUNT
  22.               MOV            DL,80H              ; DRIVE 0
  23.               MOV            DH,0                ; GOTTA HAVE A HEAD NUMBER
  24.               MOV            CX,CYLNUM0          ; GET CYLINDER NUMBER
  25.               ADD            CX,100              ; INCREMENT BY 100
  26.               MOV            CYLNUM0,CX          ; PUT IT BACK
  27.               XCHG           CL,CH               ; PUT LO ORDER IN CH
  28.               SAL            CL,1                ; PUT HI IN TOP OF CL
  29.               SAL            CL,1                ; PUT HI IN TOP OF CL
  30.               SAL            CL,1                ; PUT HI IN TOP OF CL
  31.               SAL            CL,1                ; PUT HI IN TOP OF CL
  32.               SAL            CL,1                ; PUT HI IN TOP OF CL
  33.               SAL            CL,1                ; PUT HI IN TOP OF CL
  34.               INC            CL                  ; NOW SAY SECTOR 1
  35.               INT            13H
  36.               MOV            AH,01H              ; CHECK STATUS
  37.               MOV            AL,1                ; GOTTA HAVE A SECTOR COUNT
  38.               MOV            DL,80H              ; DRIVE 0
  39.               MOV            DH,0                ; GOTTA HAVE A HEAD NUMBER
  40.               MOV            CX,1                ; CYL 0 SECTOR 1
  41.               INT            13H
  42.               OR             AL,AL
  43.               JZ             SEEK0100
  44.               MOV            AX,CYLNUM0
  45.               SUB            AX,100
  46.               MOV            CYLNUM0,AX
  47. ;
  48. ;  MOVE DRIVE 0 AS FAR AS POSSIBLE IN STEPS OF 10 TRACKS
  49. ;
  50. SEEK010:      MOV            AH,0CH              ; SEEK
  51.               MOV            AL,1                ; GOTTA HAVE A SECTOR COUNT
  52.               MOV            DL,80H              ; DRIVE 0
  53.               MOV            DH,0                ; GOTTA HAVE A HEAD NUMBER
  54.               MOV            CX,CYLNUM0          ; GET CYLINDER NUMBER
  55.               ADD            CX,10               ; INCREMENT BY 10
  56.               MOV            CYLNUM0,CX          ; PUT IT BACK
  57.               XCHG           CL,CH               ; PUT LO ORDER IN CH
  58.               SAL            CL,1                ; PUT HI IN TOP OF CL
  59.               SAL            CL,1                ; PUT HI IN TOP OF CL
  60.               SAL            CL,1                ; PUT HI IN TOP OF CL
  61.               SAL            CL,1                ; PUT HI IN TOP OF CL
  62.               SAL            CL,1                ; PUT HI IN TOP OF CL
  63.               SAL            CL,1                ; PUT HI IN TOP OF CL
  64.               INC            CL                  ; NOW SAY SECTOR 1
  65.               INT            13H
  66.               MOV            AH,01H              ; CHECK STATUS
  67.               MOV            AL,1                ; GOTTA HAVE A SECTOR COUNT
  68.               MOV            DL,80H              ; DRIVE 0
  69.               MOV            DH,0                ; GOTTA HAVE A HEAD NUMBER
  70.               MOV            CX,1                ; CYL 0 SECTOR 1
  71.               INT            13H
  72.               OR             AL,AL
  73.               JZ             SEEK010
  74.               MOV            AX,CYLNUM0
  75.               SUB            AX,10
  76.               MOV            CYLNUM0,AX
  77. ;
  78. ;  MOVE DRIVE 0 AS FAR AS POSSIBLE IN STEPS OF 1 TRACK
  79. ;
  80. SEEK01:       MOV            AH,0CH              ; SEEK
  81.               MOV            AL,1                ; GOTTA HAVE A SECTOR COUNT
  82.               MOV            DL,80H              ; DRIVE 0
  83.               MOV            DH,0                ; GOTTA HAVE A HEAD NUMBER
  84.               INC            CYLNUM0             ; INCREMENT CYLINDER NUM
  85.               MOV            CX,CYLNUM0          ; GET CYL NUMBER
  86.               XCHG           CL,CH               ; PUT LO ORDER IN CH
  87.               SAL            CL,1                ; PUT HI IN TOP OF CL
  88.               SAL            CL,1                ; PUT HI IN TOP OF CL
  89.               SAL            CL,1                ; PUT HI IN TOP OF CL
  90.               SAL            CL,1                ; PUT HI IN TOP OF CL
  91.               SAL            CL,1                ; PUT HI IN TOP OF CL
  92.               SAL            CL,1                ; PUT HI IN TOP OF CL
  93.               INC            CL                  ; NOW SAY SECTOR 1
  94.               INT            13H
  95.               MOV            AH,01H              ; CHECK STATUS
  96.               MOV            AL,1                ; GOTTA HAVE A SECTOR COUNT
  97.               MOV            DL,80H              ; DRIVE 0
  98.               MOV            DH,0                ; GOTTA HAVE A HEAD NUMBER
  99.               MOV            CX,1                ; CYL 0 SECTOR 1
  100.               INT            13H
  101.               OR             AL,AL
  102.               JZ             SEEK01
  103.               DEC            CYLNUM0
  104.               CMP            CYLNUM0,0
  105.               JE             NODRIVE0
  106.               MOV            AX,CYLNUM0
  107.               PUSH           DS
  108.               POP            ES
  109.               LEA            DX,CYLDEC0
  110.               CALL           DECIMAL_CONVERT
  111.               MOV            AH,9
  112.               LEA            DX,CYLMSG0
  113.               INT            21H
  114. NODRIVE0:
  115. ;
  116. ;  MOVE DRIVE 1 AS FAR AS POSSIBLE IN STEPS OF 100 TRACKS
  117. ;
  118. SEEK1100:     MOV            AH,0CH              ; SEEK
  119.               MOV            AL,1                ; GOTTA HAVE A SECTOR COUNT
  120.               MOV            DL,81H              ; DRIVE 1
  121.               MOV            DH,0                ; GOTTA HAVE A HEAD NUMBER
  122.               MOV            CX,CYLNUM1          ; GET CYLINDER NUMBER
  123.               ADD            CX,100              ; INCREMENT BY 100
  124.               MOV            CYLNUM1,CX          ; PUT IT BACK
  125.               XCHG           CL,CH               ; PUT LO ORDER IN CH
  126.               SAL            CL,1                ; PUT HI IN TOP OF CL
  127.               SAL            CL,1                ; PUT HI IN TOP OF CL
  128.               SAL            CL,1                ; PUT HI IN TOP OF CL
  129.               SAL            CL,1                ; PUT HI IN TOP OF CL
  130.               SAL            CL,1                ; PUT HI IN TOP OF CL
  131.               SAL            CL,1                ; PUT HI IN TOP OF CL
  132.               INC            CL                  ; NOW SAY SECTOR 1
  133.               INT            13H
  134.               MOV            AH,01H              ; CHECK STATUS
  135.               MOV            AL,1                ; GOTTA HAVE A SECTOR COUNT
  136.               MOV            DL,81H              ; DRIVE 1
  137.               MOV            DH,0                ; GOTTA HAVE A HEAD NUMBER
  138.               MOV            CX,1                ; CYL 0 SECTOR 1
  139.               INT            13H
  140.               OR             AL,AL
  141.               JZ             SEEK1100
  142.               MOV            AX,CYLNUM1
  143.               SUB            AX,100
  144.               MOV            CYLNUM1,AX
  145. ;
  146. ;  MOVE DRIVE 1 AS FAR AS POSSIBLE IN STEPS OF 10 TRACKS
  147. ;
  148. SEEK110:      MOV            AH,0CH              ; SEEK
  149.               MOV            AL,1                ; GOTTA HAVE A SECTOR COUNT
  150.               MOV            DL,81H              ; DRIVE 1
  151.               MOV            DH,0                ; GOTTA HAVE A HEAD NUMBER
  152.               MOV            CX,CYLNUM1          ; GET CYLINDER NUMBER
  153.               ADD            CX,10               ; INCREMENT BY 10
  154.               MOV            CYLNUM1,CX          ; PUT IT BACK
  155.               XCHG           CL,CH               ; PUT LO ORDER IN CH
  156.               SAL            CL,1                ; PUT HI IN TOP OF CL
  157.               SAL            CL,1                ; PUT HI IN TOP OF CL
  158.               SAL            CL,1                ; PUT HI IN TOP OF CL
  159.               SAL            CL,1                ; PUT HI IN TOP OF CL
  160.               SAL            CL,1                ; PUT HI IN TOP OF CL
  161.               SAL            CL,1                ; PUT HI IN TOP OF CL
  162.               INC            CL                  ; NOW SAY SECTOR 1
  163.               INT            13H
  164.               MOV            AH,01H              ; CHECK STATUS
  165.               MOV            AL,1                ; GOTTA HAVE A SECTOR COUNT
  166.               MOV            DL,81H              ; DRIVE 1
  167.               MOV            DH,0                ; GOTTA HAVE A HEAD NUMBER
  168.               MOV            CX,1                ; CYL 0 SECTOR 1
  169.               INT            13H
  170.               OR             AL,AL
  171.               JZ             SEEK110
  172.               MOV            AX,CYLNUM1
  173.               SUB            AX,10
  174.               MOV            CYLNUM1,AX
  175. ;
  176. ;  MOVE DRIVE 0 AS FAR AS POSSIBLE IN STEPS OF 1 TRACK
  177. ;
  178. SEEK1:        MOV            AH,0CH              ; SEEK
  179.               MOV            AL,1                ; GOTTA HAVE A SECTOR COUNT
  180.               MOV            DL,81H              ; DRIVE 1
  181.               MOV            DH,0                ; GOTTA HAVE A HEAD NUMBER
  182.               INC            CYLNUM1             ; INCREMENT CYLINDER NUM
  183.               MOV            CX,CYLNUM1          ; GET CYL NUMBER
  184.               XCHG           CL,CH               ; PUT LO ORDER IN CH
  185.               SAL            CL,1                ; PUT HI IN TOP OF CL
  186.               SAL            CL,1                ; PUT HI IN TOP OF CL
  187.               SAL            CL,1                ; PUT HI IN TOP OF CL
  188.               SAL            CL,1                ; PUT HI IN TOP OF CL
  189.               SAL            CL,1                ; PUT HI IN TOP OF CL
  190.               SAL            CL,1                ; PUT HI IN TOP OF CL
  191.               INC            CL                  ; NOW SAY SECTOR 1
  192.               INT            13H
  193.               MOV            AH,01H              ; CHECK STATUS
  194.               MOV            AL,1                ; GOTTA HAVE A SECTOR COUNT
  195.               MOV            DL,81H              ; DRIVE 1
  196.               MOV            DH,0                ; GOTTA HAVE A HEAD NUMBER
  197.               MOV            CX,1                ; CYL 0 SECTOR 1
  198.               INT            13H
  199.               OR             AL,AL
  200.               JZ             SEEK1
  201.               DEC            CYLNUM1
  202.               CMP            CYLNUM1,0
  203.               JE             NODRIVE1
  204.               MOV            AX,CYLNUM1
  205.               PUSH           DS
  206.               POP            ES
  207.               LEA            DX,CYLDEC1
  208.               CALL           DECIMAL_CONVERT
  209.               MOV            AH,9
  210.               LEA            DX,CYLMSG1
  211.               INT            21H
  212. NODRIVE1:
  213.               MOV            AH,9
  214.               LEA            DX,BLANKLINE
  215.               INT            21H
  216.               INT            20H
  217. CYLMSG0       DB             0AH,0DH,"Hard disk 0 parked at cylinder"
  218. CYLDEC0       DB             "     .$"
  219. CYLMSG1       DB             0AH,0DH,"Hard disk 1 parked at cylinder"
  220. CYLDEC1       DB             "     .$"
  221. BLANKLINE     DB             0AH,0DH,"$"
  222.               SUBTTL         DECIMAL CONVERT (TO ASCII STRING FOR DISPLAY)
  223.               PAGE
  224. ;
  225. ;  DECIMAL_CONVERT IS ENTERED WITH A NUMBER IN AX AND ES:DX POINTING TO
  226. ;  A FIVE-BYTE FIELD.  IT CONVERTS THE NUMBER INTO A FIVE-BYTE INTEGER
  227. ;  FROM 0 TO 65535 AND PLACES IT IN ASCII IN THE FIVE-BYTE FIELD.
  228. ;  IT ALTERS NO REGISTERS AT ALL.
  229. ;
  230. DECIMAL_CONVERT PROC
  231.               PUSH           BX
  232.               PUSH           DX
  233.               PUSH           DI
  234.               ASSUME         ES:NOTHING
  235. ;
  236. ;  DIVIDE BY TEN TO GET UNITS AS REMAINDER
  237. ;
  238.               MOV            DI,DX
  239.               MOV            BX,10               ; DIVISOR
  240.               MOV            DX,0                ; HIGH ORDER MUST BE ZERO
  241.               DIV            BX                  ; DIVIDE -- REMAINDER IN DX
  242.               ADD            DL,"0"              ; MAKE REMAINDER ASCII
  243.               MOV            BYTE PTR ES:[DI+4],DL  ; PUT BYTE IN DESTINATION
  244. ;
  245. ;  DIVIDE AGAIN FOR TENS
  246. ;
  247.               MOV            DX,0                ; HIGH ORDER MUST BE ZERO
  248.               DIV            BX
  249.               ADD            DL,"0"
  250.               MOV            BYTE PTR ES:[DI+3],DL
  251. ;
  252. ;  DIVIDE AGAIN FOR HUNDREDS
  253. ;
  254.               MOV            DX,0
  255.               DIV            BX
  256.               ADD            DL,"0"
  257.               MOV            BYTE PTR ES:[DI+2],DL
  258. ;
  259. ;  THOUSANDS
  260. ;
  261.               MOV            DX,0
  262.               DIV            BX
  263.               ADD            DL,"0"
  264.               MOV            BYTE PTR ES:[DI+1],DL
  265. ;
  266. ;  TEN-THOUSANDS
  267. ;
  268.               MOV            DX,0
  269.               DIV            BX
  270.               ADD            DL,"0"
  271.               MOV            BYTE PTR ES:[DI],DL
  272. ;
  273. ;  GET RID OF LEADING ZEROS
  274. ;
  275.               CMP            BYTE PTR ES:[DI],"0"
  276.               JNE            DECIMAL_DONE
  277.               MOV            BYTE PTR ES:[DI]," "
  278.               CMP            BYTE PTR ES:[DI+1],"0"
  279.               JNE            DECIMAL_DONE
  280.               MOV            BYTE PTR ES:[DI+1]," "
  281.               CMP            BYTE PTR ES:[DI+2],"0"
  282.               JNE            DECIMAL_DONE
  283.               MOV            BYTE PTR ES:[DI+2]," "
  284.               CMP            BYTE PTR ES:[DI+3],"0"
  285.               JNE            DECIMAL_DONE
  286.               MOV            BYTE PTR ES:[DI+3]," "
  287. DECIMAL_DONE:
  288.               POP            DI
  289.               POP            DX
  290.               POP            BX
  291.               RET
  292. DECIMAL_CONVERT ENDP
  293. CODE_SEG      ENDS
  294.               END            BEGIN
  295.